一 . 概述

感知器是一种人工神经网络。它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类器。

二 . 定义

感知器使用特征向量来表示的前馈神经网络。

w是实数的表示权重的向量,w.x是点积。b是偏置,一个不依赖于任何输入值的常数。偏置可以认为是激励函数的偏移量,或者给神经元一个基础活跃等级。

三 .作为逻辑运算符的感知器

这种感知器 可以执行 and ornot 运算。

这种感知器有2个输入值为{true, false} 类似 {1, 0} 和 一个输出 yes or no.

1 . AND 感知器

IN IN OUT
1 1 yes
1 0 no
0 1 no
0 0 no

2 . OR 感知器

IN IN OUT
1 1 yes
1 0 yes
0 1 yes
0 0 no

3 . NOT 感知器

IN OUT
1 yes
0 no

4 . XOR 感知器

IN IN OUT
1 1 no
1 0 yes
0 1 yes
0 0 no

四 . 感知器算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import pandas as pd

np.random.seed(42)

def stepFunction(t):
if t >= 0:
return 1
return 0

## 设置函数
def prediction(X, W, b):
return stepFunction((np.matmul(X,W)+b)[0])

## 计算新权重
def perceptronStep(X, y, W, b, learn_rate = 0.01):
for i in range(len(X)):
y_hat = prediction(X[i],W,b)

if y[i] - y_hat == 1:
W[0] += X[i][0]*learn_rate
W[1] += X[i][1]*learn_rate
elif y[i] - y_hat == -1:
W[0] -= X[i][0]*learn_rate
W[1] -= X[i][1]*learn_rate

return W, b

## 感知器算法
def trainPerceptronAlgorithm(X, y, learn_rate = 0.01, num_epochs = 25):
x_min, x_max = min(X.T[0]), max(X.T[0])
y_min, y_max = min(X.T[1]), max(X.T[1])
W = np.array(np.random.rand(2,1))
b = np.random.rand(1)[0] + x_max
# These are the solution lines that get plotted below.
boundary_lines = []
for i in range(num_epochs):
# In each epoch, we apply the perceptron step.
W, b = perceptronStep(X, y, W, b, learn_rate)
boundary_lines.append((-W[0]/W[1], -b/W[1]))
return boundary_lines


data = np.asarray(pd.read_csv('data.csv'))
x = data[:, 0:data.shape[1]-1]
y = data[:, -1]

res = trainPerceptronAlgorithm(x, y)